package com.ly.blog2Word.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: lyMaster
 * @time: 2020/7/29 14:06
 */
public class ArticleUtils {

    private static final int limitLength = 200;

    /**
     * 默认长度
     * @param contentHtml
     * @return
     */
    public static String cleanHtmlAndLimitLength(String contentHtml){
        return cleanHtmlAndLimitLength(contentHtml,limitLength);
    }
    /**
     * 切割展示内容标签，涉及长度限制、图片移除
     * @param contentHtml 文本样式
     * @param showLength 限定长度
     * @return 纯文本
     */
    public static String cleanHtmlAndLimitLength(String contentHtml,int showLength){
        String content = changeRiceToSimple(contentHtml);
        if(content.length() > showLength) {
            String temp = content.substring(0, showLength);
            if(temp.lastIndexOf("<") != -1){  //长度中出现不完整<> 处理
                if(temp.substring(temp.lastIndexOf("<"),temp.length()).indexOf(">") == -1){
                    return temp.substring(0,temp.lastIndexOf("<")) + "...";
                }
            }
            return temp + "...";
        }
        return content;
    }





    /**
     * 文本提取base编码图片 - 将文本图片位置置换为空
     * @param content 文本内容 包含图片的base64编码
     * @return 文本中存在的图片base64字符串集合
     */
    public static List<String> getImageFromBase64(String content){
        String preImg = "<img src=\"";
        List<String> imageBase = new ArrayList<>();
        String[] imgInfoArr = content.split(preImg);
        for(int i=1;i< imgInfoArr.length;i++){
            String imgInfo = imgInfoArr[i];
            if(imgInfo.contains("\">")) {
                imgInfo = imgInfo.substring(0, imgInfo.indexOf("\">"));
                String imgBase64 = imgInfo.substring(0,imgInfo.indexOf("\" "));
                imageBase.add(imgBase64);
            }
        }
        return imageBase;
    }


    /**
     * 将html富文本切换纯文本 替换 < /> 文本  图片切换为自定义样式。
     * @param content 文本内容
     * @return 纯文本-不包含标签
     */
    public static String changeRiceToSimple(String content){
        content = content.replaceAll("<(((?!img)).)+?>",""); //正则 ? 的 贪婪模式（最大匹配）和懒惰模式（最小匹配） (((?!img)).) (?!pattern) 零宽负向先行断言 或者 (?<!pattern) 零宽负向后行断言
        content = content.replaceAll("(\\s|(&nbsp;))","");
//        content = content.replaceAll("<.+?>","<img src=\"\" alt=\"详情中可展示！\">");
        content = content.replaceAll("<.+?>","");
        return content;
    }

    public static String subStringWithLengthWithKey(String contentHtml, String searchKey) {
        return subStringWithLengthWithKey(contentHtml,limitLength,searchKey);
    }
    /**
     * 文本内容标记查看
     * @param contentHtml 内容
     * @param showLength 展示长度
     * @param searchKey 关键字
     * @return 字符结果
     */
    public static String subStringWithLengthWithKey(String contentHtml,int showLength, String searchKey) {
        String content = changeRiceToSimple(contentHtml);
        if(content.length() > showLength) {
            int keyPosition = content.indexOf(searchKey);
            if((keyPosition + searchKey.length()) > showLength){
                content = content.substring(keyPosition + searchKey.length() - showLength,content.length()-1);
            }
            content = content.substring(0, showLength);
        }
        content = content.replaceAll(searchKey,"<font style='color:red;'>"+searchKey+"</font>");
        return content;
    }


}
